
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author ebastos
 */
@WebServlet(urlPatterns = {"/controladora"})
public class controladora extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            response.setContentType("text/html;charset=UTF-8");
            String acao = request.getParameter("action");
            if (acao == null || (acao.isEmpty())) {
                throw new Exception("A ação da controladora não foi informada");
            }

            switch (acao) {
                case "entrada":
                    String btnCategoria = request.getParameter("btnCategoria");
                    if (btnCategoria != null && btnCategoria.equals("Categoria")) {
                        RequestDispatcher rdCategoria = request.getRequestDispatcher("./categoria.jsp");
                        request.setAttribute("listaCategorias", new BeanCategoria().Listar());
                        rdCategoria.forward(request, response);
                    }
                    String btnSubCategoria = request.getParameter("btnSubCategoria");
                    if (btnSubCategoria != null && btnSubCategoria.equals("SubCategoria")) {
                        RequestDispatcher rdSubCategoria = request.getRequestDispatcher("./sub_categoria.jsp");
                        request.setAttribute("listaSubCategorias", new BeanSubCategoria().Listar());
                        rdSubCategoria.forward(request, response);
                    }

                    String btnProduto = request.getParameter("btnProduto");

                    break;
                case "categoria":
                    String btnCadastrarCategoria = request.getParameter("btnCadastrar");
                    if (btnCadastrarCategoria != null && btnCadastrarCategoria.equals("Cadastrar")) {
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./categoria_cadastrar.jsp");
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnVisualizarCategoria = request.getParameter("btnVisualizar");
                    if (btnVisualizarCategoria != null && !btnVisualizarCategoria.isEmpty()) {
                        RequestDispatcher rdVisualizacaoCategoria = request.getRequestDispatcher("./categoria_visualizar.jsp");
                        request.setAttribute("categoria", new BeanCategoria(Integer.parseInt(btnVisualizarCategoria)));
                        rdVisualizacaoCategoria.forward(request, response);
                    }

                    String btnEditarCategoria = request.getParameter("btnEditar");
                    if (btnEditarCategoria != null && !btnEditarCategoria.isEmpty()) {
                        RequestDispatcher rdEditarCategoria = request.getRequestDispatcher("./categoria_editar.jsp");
                        request.setAttribute("categoria", new BeanCategoria(Integer.parseInt(btnEditarCategoria)));
                        rdEditarCategoria.forward(request, response);
                    }

                    String btnRemoverCategoria = request.getParameter("btnRemover");
                    if (btnRemoverCategoria != null && !btnRemoverCategoria.isEmpty()) {
                        BeanCategoria removerCategoria = new BeanCategoria(Integer.parseInt(btnRemoverCategoria));
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./categoria.jsp");
                        removerCategoria.Deleta(removerCategoria);
                        request.setAttribute("listaCategorias", removerCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnNovaCategoria = request.getParameter("btnCadastroNovaCategoria");
                    if (btnNovaCategoria != null && btnNovaCategoria.equals("Cadastrar")) {
                        BeanCategoria novaCategoria = new BeanCategoria();
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./categoria.jsp");
                        String nomeNovaCategoria = request.getParameter("txtNome");
                        novaCategoria.Salvar(0, nomeNovaCategoria);
                        request.setAttribute("listaCategorias", novaCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnEdicaoCategoria = request.getParameter("btnEditarCategoria");
                    if (btnEdicaoCategoria != null && !btnEdicaoCategoria.isEmpty()) {
                        BeanCategoria edicaoCategoria = new BeanCategoria();
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./categoria.jsp");
                        String nomeCategoriaEditada = request.getParameter("txtNome");
                        edicaoCategoria.Salvar(Integer.parseInt(btnEdicaoCategoria), nomeCategoriaEditada);
                        request.setAttribute("listaCategorias", edicaoCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    break;
                case "subcategoria":
                    String btnCadastrarSubCategoria = request.getParameter("btnCadastrar");
                    if (btnCadastrarSubCategoria != null && btnCadastrarSubCategoria.equals("Cadastrar")) {
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./subcategoria_cadastrar.jsp");
                        request.setAttribute("categorias", new BeanCategoria().Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnVisualizarSubCategoria = request.getParameter("btnVisualizar");
                    if (btnVisualizarSubCategoria != null && !btnVisualizarSubCategoria.isEmpty()) {
                        RequestDispatcher rdVisualizacaoCategoria = request.getRequestDispatcher("./subcategoria_visualizar.jsp");
                        request.setAttribute("categoria", new BeanSubCategoria(Integer.parseInt(btnVisualizarSubCategoria)));
                        rdVisualizacaoCategoria.forward(request, response);
                    }

                    String btnEditarSubCategoria = request.getParameter("btnEditar");
                    if (btnEditarSubCategoria != null && !btnEditarSubCategoria.isEmpty()) {
                        RequestDispatcher rdEditarCategoria = request.getRequestDispatcher("./subcategoria_editar.jsp");
                        request.setAttribute("categoria", new BeanSubCategoria(Integer.parseInt(btnEditarSubCategoria)));
                        request.setAttribute("categorias", new BeanCategoria().Listar());
                        rdEditarCategoria.forward(request, response);
                    }

                    String btnRemoverSubCategoria = request.getParameter("btnRemover");
                    if (btnRemoverSubCategoria != null && !btnRemoverSubCategoria.isEmpty()) {
                        BeanSubCategoria removerCategoria = new BeanSubCategoria(Integer.parseInt(btnRemoverSubCategoria));
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./sub_categoria.jsp");
                        removerCategoria.Deleta(removerCategoria);
                        request.setAttribute("listaSubCategorias", removerCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnNovaSubCategoria = request.getParameter("btnCadastroNovaCategoria");
                    if (btnNovaSubCategoria != null && btnNovaSubCategoria.equals("Cadastrar")) {
                        BeanSubCategoria novaCategoria = new BeanSubCategoria();
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./sub_categoria.jsp");
                        String nomeNovaCategoria = request.getParameter("txtNome");
                        novaCategoria.Salvar(0, nomeNovaCategoria, Integer.parseInt(request.getParameter("ddbCategoriaPai")));
                        request.setAttribute("listaSubCategorias", novaCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }

                    String btnEdicaoSubCategoria = request.getParameter("btnEditarCategoria");
                    if (btnEdicaoSubCategoria != null && !btnEdicaoSubCategoria.isEmpty()) {
                        BeanSubCategoria edicaoCategoria = new BeanSubCategoria();
                        RequestDispatcher rdVisualizarCategoria = request.getRequestDispatcher("./sub_categoria.jsp");
                        String nomeCategoriaEditada = request.getParameter("txtNome");
                        edicaoCategoria.Salvar(Integer.parseInt(btnEdicaoSubCategoria), nomeCategoriaEditada,Integer.parseInt(request.getParameter("ddbCategoriaPai")));
                        request.setAttribute("listaSubCategorias", edicaoCategoria.Listar());
                        rdVisualizarCategoria.forward(request, response);
                    }
                    
                    break;
                default:
                    throw new Exception("Ação informada não reconhecida.");
            }
        } catch (Exception e) {
            RequestDispatcher rd = request.getRequestDispatcher("./erro.jsp");
            request.setAttribute("erro", e.getMessage());
            rd.forward(request, response);
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
